//! Header for the Car class
#ifndef CAR_H
#define CAR_H

#include "Object.h"
#include "ICar.h"

//! Represents a Car and holds information about it
/*!
	The Car class holds information about a Car such as price,
	manufacturer and type. It is also able to print these infos
	to ostream.
	\class Car
	\author Andreas Lehner
	\date 22.11.2012
*/
class Car : public Object, public ICar {
public:
	//! CTor of class Car
	/*!
		The constructor sets the information the Car consists of
		(manufacturer, type and price of a certain car class).
		\param manufacturer The manufacturer of a Car
		\param type The type of a Car
	*/
	Car(std::string const& manufacturer, std::string const& type):
		mManufacturer(manufacturer), mType(type){}
	float GetPrice() const;
	void Print(std::ostream &stream) const;
	std::string const& GetManufacturer() const;
	std::string const& GetType() const;
protected:
	//! Prints the text of a Car
	/*!
		This function is used to get the class of a car.
		This method is called by the Template Method Print().
		\param stream The ostream where the information is output
	*/
	virtual void DoPrint(std::ostream &stream) const = 0;
	//! The Price of a Car (in a certain car class and
	//! price class respectively)
	float mPrice;
	//! The manufacturer of a car
	std::string mManufacturer;
	//! The type of a car
	std::string mType;
};

#endif